package myky.com.doctorapp.utils;

import android.content.Context;
import android.util.Log;

import com.blankj.utilcode.util.LogUtils;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by 61904 on 2018/4/13.
 */

/**
 * UncaughtException处理类,当程序发生Uncaught异常的时候,有该类来接管程序,并记录发送错误报告.
 *
 * @author Gordon
 *
 */

public class LogCollectionUtils implements Thread.UncaughtExceptionHandler{


    public static final String TAG = "LogCollectionUtils";
    /**
     * 系统默认的UncaughtException处理类
     */
    private Thread.UncaughtExceptionHandler mDefaultHandler;
    /**
     * CrashUtil实例
     */
    private static LogCollectionUtils INSTANCE = new LogCollectionUtils();
    private Context mContext;
    /**
     * 用来存储设备信息和异常信息
     */
    private Map<String, String> infos = new HashMap<String, String>();
    public static String PATH_VALUE="c-0-0";

    private LogCollectionUtils() {
    }

    /** 获取CrashUtil实例 ,单例模式 */
    public static LogCollectionUtils getInstance() {
        return INSTANCE;
    }

    /**
     * 初始化
     *
     * @param context
     */
    public void init(Context context) {
        mContext = context;
        //获取系统默认的UncaughtException处理器
        mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
        //设置该CrashUtil为程序的默认处理器
        Thread.setDefaultUncaughtExceptionHandler(this);
    }


    @Override
    public void uncaughtException(Thread t, Throwable e) {

        if (!handleException(e) && mDefaultHandler != null) {
            //如果用户没有处理则让系统默认的异常处理器来处理
            mDefaultHandler.uncaughtException(t, e);
        } else {
            try {
                Thread.sleep(3000);
            } catch (InterruptedException ex) {
                LogUtils.i("error : ", ex.toString());
            }
            //退出程序
            android.os.Process.killProcess(android.os.Process.myPid());
            System.exit(1);
        }

    }
    /**
     * 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成.
     *
     * @param ex
     * @return true
     */
    private boolean handleException(Throwable ex) {
        if (ex == null) {
            return false;
        }
        LogUtils.i("error : ", ex.toString());
        uploadLogs(mContext,"c",ex.toString());
        return true;
    }

    /**
     * 设置路径
     * @param value
     */
    public static void setLogValue(String value){
        PATH_VALUE=value;
    }
//    //集合设置路径
//    public static void setLogValue(Context context,int arrayId){
//        try {
//        String[] strings=context.getResources().getStringArray(arrayId);
//        for (String s:strings){
//            if (s.contains(PATH_VALUE)){
//                PATH_VALUE=s;
//            }
//        }
//        }catch (Exception e){}
//    }

    /**
     * 上传模块操作日志上传
     * @param context
     * @param value
     * @param content
     */
    public static void uploadLog(Context context,String value,String content){
        try {
             PATH_VALUE=value;
             uploadLogs(context,PATH_VALUE,content);
        }catch (Exception e){}

    }

    /**
     * 上传模块操作日志上传
     * @param context
     * @param arrayId
     * @param content
     */
    public static void uploadLog(Context context,int arrayId,String content){

        try {
            String[] strings=context.getResources().getStringArray(arrayId);
            for (String s:strings){
                if (s.contains(PATH_VALUE)){
                    PATH_VALUE=s;
                }
            }
            uploadLogs(context,PATH_VALUE,content);
        }catch (Exception e){}

    }

    /**
     * 上传日志
     * @param context
     * @param appId
     * @param function
     */
    public static void uploadLogs(Context context,String appId, String function) {
        Log.i("out", "onResponse." + function);
//        String json=null;
//
//        LogsBean logsBean=new LogsBean();
//        logsBean.setId(1);
//        if(appId!=null){
//
//        if (appId.equals("c")){
//            logsBean.setSource(1);
//        }else {
//        logsBean.setSource(0);
//        }
//        }
//        LogsBean.RequestListsBean requestListsBean=new LogsBean.RequestListsBean();
//        List<LogsBean.RequestListsBean> listsBeans=new ArrayList<>();
//        requestListsBean.setLogAppId(appId);
//        requestListsBean.setLogTimestamp(SystemUtil.getCurrentTime_mm());
//        requestListsBean.setLogVersionId(SystemUtil.getVersionName(context));
//        requestListsBean.setLogFunction("");
//        requestListsBean.setLogUserId(LoginUtils.UserID+"");
//        requestListsBean.setMessage(function+SystemUtil.getPhoneParameter());
//        requestListsBean.setLogOperationClass("null");
//        listsBeans.add(requestListsBean);
//        logsBean.setRequestLists(listsBeans);
//        json=GsonUtil.GsonString(logsBean);
//
//        LogUtils.i("Json",json);
//        OkHttpManager.getInstance().post(json, UrlUtils.LogsUrl, new OkHttpManager.HttpCallBack() {
//            @Override
//            public void onFailure(String errorMsg) {
//
//            }
//
//            @Override
//            public void onResponse(String jsonObject, long type) {
//
//            }
//        });

    }


}

